<?php

namespace app\admin\logic\sign;


use app\admin\interface\Logic;
use app\admin\pattern\strategy\login\LoginContext;

class Login implements Logic
{
	public function run(mixed ...$params)
	{

		// 从请求参数中获取登录类型
		$type = request()->param('type');

		// 检查类型参数是否为空
		if (empty($type)) {
			// 类型参数为空时，返回参数错误响应
			return responseData(400, 'type is not empty!');
		}

		// 格式化类型字符串，确保其符合类名命名规范
		$type = str_replace('_', '', ucwords($type, '_'));
		// 根据类型构建登录策略类的完整命名空间
		$login_strategy = "app\\admin\\pattern\\strategy\\login\\{$type}Login";

		// 检查构建的登录策略类是否存在于项目中
		if (!class_exists($login_strategy)) {
			// 若类不存在，返回参数错误响应，指定的登录逻辑策略未找到
			return responseData(400, 'logic strategy [' . $type . '] is not found!');
		}

		// 实例化登录策略上下文对象，传入对应的登录策略类实例
		$login_strategy_context = new LoginContext(new $login_strategy);
		// 执行登录策略并返回结果
		return $login_strategy_context->run();	}
}